package code201_300.code30_40;

/**
 * 请编写一个函数，用于 删除单链表中某个特定节点 。在设计函数时需要注意，你无法访问链表的头节点 head ，只能直接访问 要被删除的节点 。
 *
 * 题目数据保证需要删除的节点 不是末尾节点 。
 *
 * 输入：head = [4,5,1,9], node = 5
 * 输出：[4,1,9]
 * 解释：指定链表中值为 5 的第二个节点，那么在调用了你的函数之后，该链表应变为 4 -> 1 -> 9
 *
 * 输入：head = [4,5,1,9], node = 1
 * 输出：[4,5,9]
 * 解释：指定链表中值为 1 的第三个节点，那么在调用了你的函数之后，该链表应变为 4 -> 5 -> 9
 *
 */
public class _237deleteNode {

    /**
     * 一时想不到题解答案，看了一眼评论，
     * 热评第一：这道题细思极恐：如何让自己在世界上消失，但又不死？ —— 将自己完全变成另一个人，再杀了那个人就行了。
     *
     * 可得两种方法：
     * 1 ： 将待删除节点值赋值为下一节点的值，以此类推，最终删除最后一个节点
     * 2 ： 将待删除结点赋值为下一节点的值，这样删除此节点就变为删除下一节点了，就可以直接进行删除
     *
     * 执行用时：     * 0 ms     * , 在所有 Java 提交中击败了     * 100.00%     * 的用户
     * 内存消耗：     * 38 MB     * , 在所有 Java 提交中击败了    * 70.50%     * 的用户
     *
     *
     *
     * @param node
     */
    public void deleteNode(ListNode node) {
/*        node.val = node.val^node.next.val;
        node.next.val = node.next.val^node.val;
        node.val = node.next.val^node.val;*/
        node.val = node.next.val;
        node.next = node.next.next;
    }

}
